// гироскоп ITG3205 
#define GYRO 0x68 // Определенный адрес датчика, AD0 подключен к GND порта, датчик адрес двоичного числа 11101000 (пожалуйста, обратитесь к вашему схемы интерфейсной платой)
#define G_SMPLRT_DIV 0x15  //Отбор проб адрес скорости регистр
#define G_DLPF_FS 0x16     //Чувствительность обнаружения и фильтр низких частот набор
#define G_INT_CFG 0x17     //Регистр конфигурации
#define G_PWR_MGM 0x3E     //Данные датчиков зарегистрироваться начальный адрес, в том числе температуры ее 3-осевой угловой скорости

#define G_TO_READ 8 // x,y,z по 2 байта на каждую ось, плюс еще два байта температуры

// Коррекция смещения гироскопа ошибке
int16 g_offx = 0;
int16 g_offy = 0;
int16 g_offz = 0;

////////////////////////////////////////////////////////////////////////////////////
//Прототип функции:  void initGyro(void)             	     
//Описание параметров:  нет                                        
// Возвращаемое значение: Нет
// Описание: инициализация ITG3205 гироскопа
///////////////////////////////////////////////////////////////////////////////////
void initGyro(void)
{
  /*****************************************
   * ITG 3200
   * Настройки управления питанием:
   * Выберите часов = внутренний генератор
   * Не сбрасывается, не спящий режим
   * Нет режима ожидания
   * Частота дискретизации = 125 Гц
   * Параметр до + / - 2000 градусов / сек
   * Фильтр низких частот 5 Гц =
   * Нет прерываний
   ******************************************/
  writeTo(GYRO, G_PWR_MGM, 0x00);
//  writeTo(GYRO, G_SMPLRT_DIV, 0x07); // EB, 50, 80, 7F, DE, 23, 20, FF
  writeTo(GYRO, G_SMPLRT_DIV, 64); // EB, 50, 80, 7F, DE, 23, 20, FF
  writeTo(GYRO, G_DLPF_FS, 0x1E); // +/- 2000 dgrs/sec, 1KHz, 1E, 19
  writeTo(GYRO, G_INT_CFG, 0x00);
}

////////////////////////////////////////////////////////////////////////////////////
//прототип функции:  void getGyroscopeData(int16 * result)           	     
//Описание параметров: * Результат: указатель гироскоп данных                                     
//Возвращаемое значение: Нет                                                          
//Описание: читать ITG3205 гироскоп исходных данных
///////////////////////////////////////////////////////////////////////////////////
void getGyroscopeData(int16 * result)
{
  /**************************************
   * Гироскоп ITG-3200 I2C
   * Регистрация:
   * temp MSB = 1B, temp LSB = 1C
   * x axis MSB = 1D, x axis LSB = 1E
   * y axis MSB = 1F, y axis LSB = 20
   * z axis MSB = 21, z axis LSB = 22
   *************************************/

  uint8 regAddress = 0x1B;
  int16 temp, x, y, z;
  uint8 buff[G_TO_READ];

  readFrom(GYRO, regAddress, G_TO_READ, buff); //Читайте гироскоп ITG3200 данных

  result[0] = (((int16)buff[2] << 8) | buff[3]) + g_offx;
  result[1] = (((int16)buff[4] << 8) | buff[5]) + g_offy;
  result[2] = (((int16)buff[6] << 8) | buff[7]) + g_offz;
  result[3] = ((int16)buff[0] << 8) | buff[1]; // температура
}
